package com.uam.sgr.retiro.actions;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.uam.sgr.matricula.dto.CursoMixDTO;
import com.uam.sgr.retiro.dto.CaleAcademicoMixDTO;
import com.uam.sgr.retiro.dto.DetalleTramiteDTO;
import com.uam.sgr.retiro.dto.TramiteDTO;
import com.uam.sgr.retiro.dto.TramiteMixDTO;
import com.uam.sgr.retiro.services.BuscarSRCicloServiceI;
import com.uam.sgr.retiro.services.ConsultarTramiteServiceI;
import com.uam.sgr.retiro.services.EvaluarSRCicloServiceI;
import com.uam.sgr.retiro.services.GenerarRCursoServiceI;
import com.uam.sgr.retiro.services.GenerarSRCicloServiceI;
import com.uam.sgr.retiro.services.RetiroBusinessDelegate;
import com.uam.sgr.seguridad.dto.UsuarioMixDTO;

public class TramiteAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private Map<String, Object> miSesion;
	private GenerarRCursoServiceI objGenerarRCursoService = RetiroBusinessDelegate
			.getGenerarRCursoService();
	private ConsultarTramiteServiceI objConsultarTramiteService = RetiroBusinessDelegate
			.getConsultarTramiteService();

	private EvaluarSRCicloServiceI objEvaluarService = RetiroBusinessDelegate
			.getEvaluarSRCicloService();

	private BuscarSRCicloServiceI objBuscarSRCicloService = RetiroBusinessDelegate
			.getBuscarSRCicloService();

	private GenerarSRCicloServiceI objGenerarSRCicloService = RetiroBusinessDelegate
			.getGenerarSRCicloService();

	private String[] cursos;

	private String motivo;

	private List<TramiteDTO> lstTramite;

	private List<TramiteDTO> lstTramiteRetiroCiclo;

	private File userImage;

	private String userImageContentType;

	private String userImageFileName;

	private static String RUTADOCUMENTO = "/documentos/";

	private String mensaje;

	// Evaluar Retiro

	private String estado;

	private String codigoTramite;

	private String rutaImagen;

	private TramiteMixDTO tramiteMixDTO;

	private List<TramiteMixDTO> lstTramiteMix;

	public String getRutaImagen() {
		return rutaImagen;
	}

	public void setRutaImagen(String rutaImagen) {
		this.rutaImagen = rutaImagen;
	}

	public TramiteMixDTO getTramiteMixDTO() {
		return tramiteMixDTO;
	}

	public void setTramiteMixDTO(TramiteMixDTO tramiteMixDTO) {
		this.tramiteMixDTO = tramiteMixDTO;
	}

	public String getCodigoTramite() {
		return codigoTramite;
	}

	public void setCodigoTramite(String codigoTramite) {
		this.codigoTramite = codigoTramite;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public List<TramiteDTO> getLstTramiteRetiroCiclo() {
		return lstTramiteRetiroCiclo;
	}

	public void setLstTramiteRetiroCiclo(List<TramiteDTO> lstTramiteRetiroCiclo) {
		this.lstTramiteRetiroCiclo = lstTramiteRetiroCiclo;
	}

	public List<TramiteDTO> getLstTramite() {
		return lstTramite;
	}

	public void setLstTramite(List<TramiteDTO> lstTramite) {
		this.lstTramite = lstTramite;
	}

	public String[] getCursos() {
		return cursos;
	}

	public void setCursos(String[] cursos) {
		this.cursos = cursos;
	}

	public String getMotivo() {
		return motivo;
	}

	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	public File getUserImage() {
		return userImage;
	}

	public void setUserImage(File userImage) {
		this.userImage = userImage;
	}

	public String getUserImageContentType() {
		return userImageContentType;
	}

	public void setUserImageContentType(String userImageContentType) {
		this.userImageContentType = userImageContentType;
	}

	public String getUserImageFileName() {
		return userImageFileName;
	}

	public void setUserImageFileName(String userImageFileName) {
		this.userImageFileName = userImageFileName;
	}

	public String cargarTramiteMix() {

		lstTramiteRetiroCiclo = objBuscarSRCicloService
				.listaTramiteRetiroCiclo();

		int codigo = Integer.parseInt(codigoTramite);

		miSesion = ActionContext.getContext().getSession();
		lstTramiteMix = objEvaluarService.listaDetalleTramite(codigo);

		miSesion.put("lstTramiteMix", lstTramiteMix);

		tramiteMixDTO = lstTramiteMix.get(0);

		rutaImagen = "documentos/" + tramiteMixDTO.getDocumentoJusti();

		System.out.println("-------------------------------------" + codigo +tramiteMixDTO.getCodTramite());

		tramiteMixDTO.setCodTramite(codigo);
		return SUCCESS;

	}

	public String evaluarSRetiroCiclo() {

		System.out.println(tramiteMixDTO.getEstado() + "--------"
				+ tramiteMixDTO.getMotivodecision());

		System.out.println(objEvaluarService.actualizarTramite(tramiteMixDTO)
				+ "-----------");
		return SUCCESS;
	}

	public String generarRetiroCurso() {
		int codTramite = 0;
		DetalleTramiteDTO detalleTramite = new DetalleTramiteDTO();

		miSesion = ActionContext.getContext().getSession();

		UsuarioMixDTO usuario = null;

		usuario = (UsuarioMixDTO) miSesion.get("usuario");

		TramiteDTO tramite = new TramiteDTO();

		tramite.setCodUsu(usuario.getCodUsu());
		tramite.setMotivo(motivo);

		tramite.setTipo("Retiro de Curso");
		tramite.setEstado("PROCEDE");

		objGenerarRCursoService.insertarTramite(tramite);

		codTramite = objGenerarRCursoService.seleccionarUltimoTramite();

		detalleTramite.setCodTramite(codTramite);

		for (String s : cursos) {
			int codCurso = Integer.parseInt(s);
			detalleTramite.setCodCurso(codCurso);
			objGenerarRCursoService.insertarDetalleTramite(detalleTramite);
			objGenerarRCursoService.actualizarVacante(codCurso);

		}

		return SUCCESS;
	}

	public String cargaTramite() {

		miSesion = ActionContext.getContext().getSession();

		UsuarioMixDTO usuario = new UsuarioMixDTO();

		usuario = (UsuarioMixDTO) miSesion.get("usuario");

		lstTramite = objConsultarTramiteService.listaTramitexAlumno(usuario
				.getCodUsu());

		miSesion.put("lstTramite", lstTramite);

		// miSesion .put(key, value)

		return SUCCESS;

	}

	public String cargaTramiteRetiroCiclo() {

		miSesion = ActionContext.getContext().getSession();
		lstTramiteRetiroCiclo = objBuscarSRCicloService
				.listaTramiteRetiroCiclo();
		miSesion.put("lstTramiteRetiroCiclo", lstTramiteRetiroCiclo);

		return SUCCESS;

	}

	@SuppressWarnings("unchecked")
	public String generarSRetiroCiclo() {
		try {

			int codTramite = 0;
			DetalleTramiteDTO detalleTramite = new DetalleTramiteDTO();

			miSesion = ActionContext.getContext().getSession();

			UsuarioMixDTO usuario = null;

			List<CursoMixDTO> lstCursos = null;

			usuario = (UsuarioMixDTO) miSesion.get("usuario");
			lstCursos = (List<CursoMixDTO>) miSesion.get("lstCursos");

			TramiteDTO tramite = new TramiteDTO();

			tramite.setCodUsu(usuario.getCodUsu());
			tramite.setMotivo(motivo);
			tramite.setDocumentoJusti(this.userImageFileName);

			tramite.setTipo("Retiro de Ciclo");
			tramite.setEstado("PENDIENTE");

			objGenerarRCursoService.insertarTramite(tramite);

			codTramite = objGenerarRCursoService.seleccionarUltimoTramite();

			detalleTramite.setCodTramite(codTramite);

			for (CursoMixDTO s : lstCursos) {
				int codCurso = s.getCodCurso();
				detalleTramite.setCodCurso(codCurso);
				objGenerarRCursoService.insertarDetalleTramite(detalleTramite);
				objGenerarRCursoService.actualizarVacante(codCurso);

			}
			System.out.println("-------------------------" + userImageFileName);

			String filePath = ServletActionContext.getServletContext()
					.getRealPath(RUTADOCUMENTO);
			// String filePath = servletRequest.getRealPath("/");
			System.out.println("Server path:" + filePath);
			// File fileToCreate = new File(filePath);
			File fileToCreate = new File(filePath, this.userImageFileName);

			FileUtils.copyFile(this.userImage, fileToCreate);

		} catch (Exception e) {
			e.printStackTrace();
		}

		return SUCCESS;
	}

	public String validarFechaRCurso() {
		String vista = null;
		miSesion = ActionContext.getContext().getSession();
		CaleAcademicoMixDTO caleAcademico = null;

		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
		String cadenaFecha = formato.format(fechaActual);

		caleAcademico = (CaleAcademicoMixDTO) objGenerarRCursoService
				.validarFechaRCurso(cadenaFecha);

		miSesion.put("caleAcademico", caleAcademico);

		if (caleAcademico != null) {
			vista = "exito";
		} else {
			vista = "fracaso";
			mensaje = getText("usuario.valida.fecha");
		}
		return vista;
	}

	public String validarFechaSRCiclo() {

		String vista = null;
		miSesion = ActionContext.getContext().getSession();
		CaleAcademicoMixDTO caleAcademico = null;

		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
		String cadenaFecha = formato.format(fechaActual);

		caleAcademico = (CaleAcademicoMixDTO) objGenerarSRCicloService
				.validarFechaRCiclo(cadenaFecha);

		miSesion.put("caleAcademico", caleAcademico);

		if (caleAcademico != null) {
			vista = "exito";
		} else {
			vista = "fracaso";
			mensaje = getText("usuario.valida.fecha");
		}
		return vista;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public List<TramiteMixDTO> getLstTramiteMix() {
		return lstTramiteMix;
	}

	public void setLstTramiteMix(List<TramiteMixDTO> lstTramiteMix) {
		this.lstTramiteMix = lstTramiteMix;
	}

}
